package com.droowa.model.dao;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import com.droowa.domain.CompletePC;
import com.droowa.domain.CompletePCResult;
import com.droowa.domain.FirstCategory;
import com.droowa.domain.Product;

public interface ProductManagementDAO {

	public abstract int insertFirstCategory(FirstCategory firstCategory) throws SQLException;
	public abstract int updateFirstCategoryById(FirstCategory firstCategory) throws SQLException;
	public abstract int updateProductCategoryName(Product product) throws SQLException;
	public abstract int deleteFirstCategoryById(String id);
	public abstract List<FirstCategory> selectCategoryList() throws SQLException;
	public abstract List<FirstCategory> selectFixedCategoryList() throws SQLException;
	public abstract List<FirstCategory> selectUnFixedCategoryList() throws SQLException;
	public abstract FirstCategory selectFirstCategoryById(String categoryId) throws SQLException;
	
	public abstract int insertProduct(Product product) throws SQLException;
	public abstract int updateProduct(Product product) throws SQLException;
	public abstract int deleteProductById(String id) throws SQLException;
	public abstract List<Product> selectProductList() throws SQLException;
	public abstract List<Product> selectRemovedProductList() throws SQLException;
	public abstract List<Product> selectProductListPaging(int page) throws SQLException;
	public abstract List<Product> selectRemovedProductListPaging(int page) throws SQLException;
	public abstract int selectRowCountPL() throws SQLException;
	public abstract int selectRowCountRPL() throws SQLException;
	public abstract Product selectProductById(String id) throws SQLException;
	public abstract List<Product> selectProductByName(String name, int page) throws SQLException;
	public abstract int selectRowCountPN(String name) throws SQLException;
	public abstract List<Product> selectProductByBrand(String brand) throws SQLException;
	public abstract List<Product> selectProductByBrandPaging(String brand, int page) throws SQLException;
	public abstract int selectRowCountB(String brand) throws SQLException;
	public abstract List<Product> selectProductByModelNo(String modelNo, int page) throws SQLException;
	public abstract int selectRowCountM(String modelNo) throws SQLException;
	public abstract List<Product> selectProductByPriceRange(int sPrice, int ePrice, int page) throws SQLException;
	public abstract int selectRowCountPR(int sPrice, int ePrice) throws SQLException;
	
	public abstract List<Product> selectRProductByName(String name, int page) throws SQLException;
	public abstract int selectRowCountRPN(String name) throws SQLException;
	public abstract List<Product> selectRProductByBrand(String brand) throws SQLException;
	public abstract List<Product> selectRProductByBrandPaging(String brand, int page) throws SQLException;
	public abstract int selectRowCountRB(String brand) throws SQLException;
	public abstract List<Product> selectRProductByModelNo(String modelNo, int page) throws SQLException;
	public abstract int selectRowCountRM(String modelNo) throws SQLException;
	public abstract List<Product> selectRProductByPriceRange(int sPrice, int ePrice, int page) throws SQLException;
	public abstract int selectRowCountRPR(int sPrice, int ePrice) throws SQLException;
	
	public abstract int updateDeltoTrue(Product product) throws SQLException;
	public abstract int updateDeltoFalse(Product product) throws SQLException;
	
	public abstract List<Product> selectInventoryList(int page) throws SQLException;
	public abstract int updateSafeInventory(Product product) throws SQLException;
	
	public abstract List<Product> selectProductByCategoryName(String categoryName, int page) throws SQLException;
	public abstract int selectRowCountCN(String categoryName) throws SQLException;
	public abstract List<Product> selectRProductByCategoryName(String categoryName, int page) throws SQLException;
	public abstract int selectRowCountRCN(String categoryName) throws SQLException;
	
	public abstract int insertCompletePC(CompletePC completePC) throws SQLException;
	public abstract List<CompletePC> selectCompletePCList() throws SQLException;
	public abstract List<CompletePC> selectCompletePCListPaging(int page) throws SQLException;
	public abstract int selectRowCountCPL() throws SQLException;
	public abstract List<CompletePC> selectCompleteEventPaging(int page) throws SQLException;
	public abstract int selectRowCountEPL() throws SQLException;
	public abstract List selectCompleteNameById(String id) throws SQLException;
	public abstract List selectCompletePC(String completeId) throws SQLException;
	public abstract List selectCompletePCByCPUBrand(String cpu, String brand) throws SQLException;
	public abstract CompletePC selectCompleteDomain(String completeId) throws SQLException;
	public abstract Map<String, String> selectCompletePCById(String completeId) throws SQLException;
	public abstract int updateCompletePC(CompletePC completePC) throws SQLException;
	public abstract int deleteCompletePCById(String completeId) throws SQLException;
	public abstract int updateEventToTrue(CompletePC completePC) throws SQLException;
	public abstract int updateEventToFalse(CompletePC completePC) throws SQLException;
	public abstract List<CompletePC> selectEventList() throws SQLException;
	public abstract List<CompletePCResult> selectCompletePCByPrice(int sPrice, int ePrice) throws SQLException;
	//public abstract List<CompletePCResult> selectCompletePCByCPU(String cpu) throws SQLException;
	public abstract List<CompletePCResult> selectCompletePCByLow(int page) throws SQLException;
	public abstract List<CompletePCResult> selectCompletePCByCPUPaging(int page) throws SQLException;
	public abstract List<CompletePCResult> selectCompletePCByGRAPHICPaging(int page) throws SQLException;
	public abstract int selectRowCountLP() throws SQLException;
	public abstract List<CompletePCResult> selectCompletePCByHigh(int page) throws SQLException;
	public abstract Map selectCompletePCByIdPrice(String completeId);
	public abstract void updateCompletePCCnt(String completeId, int cnt);
	public abstract CompletePC selectCompletePCByIdBasic(String completeId);
	public abstract void updateProductQuantity(String id);
	
}
